const fs = require("fs") //

let school = {}

// 通过回调的方式来解决异步并发的问题
// function finish() {
//   if (Reflect.ownKeys(school).length == 2) {
//     console.log(school);
//   }
// }

// => 闭包出现了 // 函数声明所在的作用域和执行的作用域,不是同一个,此时就会产生闭包
function after(times, callback) {
  let school = {}
  return function finish(key, value) {
    school[key] = value
    if (Reflect.ownKeys(school).length == times) {
      callback(school)
    }
  }
}

let finish = after(2, (school) => {
  console.log(school);
})

//异步, 不能立即拿到返回值, 通过回调的方式返回结果
// node是不支持 gbk的,所以只能写 utf8.
fs.readFile("./name.txt", "utf8", (err, data) => {
  // school["name"] = data
  // finish()
  finish("name", data)
})
fs.readFile("./age.txt", "utf8", (err, data) => {
  // school["age"] = data
  // finish()
  finish("age", data)
})


//  上述两个异步读取文件的方法, 不一定谁先执行
console.log(" ---- 读取文件下边儿的代码 ---- ");


// 对于前端, 我们希望调用两个 ajax, 拿到最终的处理结果, 去渲染页面.


// 1. 不用 promise, 异步就用回调的方式
// 2. 发布订阅模式

//
// let data1 = {name:"gene",age:19,addrss:"和河北"}
// console.log(Reflect.ownKeys(data1)) // 返回 keys 数组


// 上述回调依然很麻烦, 所以我们前端经常会用到一种 发布订阅模式
